#ifndef MYJSON_H
#define MYJSON_H

#include <QFile>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>
#include <QDebug>
#include <QFileInfo>
#include <QCryptographicHash>
#include <QTextCodec>
#include "HttpRequest.h"

QJsonObject getCsvJsonObj(const QString &filePath)
{
    QJsonObject obj;

    // 读取文件内容
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly)) {
        // 处理文件打开失败的情况
        qDebug() << "文件: " << filePath << " 打开失败";
        return obj;
    }

    QByteArray fileContent = file.readAll();
    file.close();

//    // 输出文件内容
//    qDebug() << "fileContent:" << fileContent;

    qDebug() << "QString:" << QString::fromUtf8(fileContent);

    QByteArray hash = QCryptographicHash::hash(fileContent, QCryptographicHash::Md5);// 获取MD5和

    // 输出文件MD5和
    QString fileMD5 = QString(hash.toHex());
//    qDebug() << "MD5:" << fileMD5;

    // 将文件内容转换为 Base64 编码
    QString base64Content = fileContent.toBase64();
//    qDebug() << "Base64:" << base64Content;



//    QString text = QString::fromUtf8(base64Content.toUtf8());
//    qDebug() << "text:" << text;

//    // 使用本地编码进行转换
//    QString textLocal = QString::fromLocal8Bit(base64Content.toUtf8());
//    qDebug() << "使用本地编码转换后的 QString:" << textLocal;

//    // 使用 Latin1 编码进行转换
//    QString textLatin1 = QString::fromLatin1(base64Content.toUtf8());
//    qDebug() << "使用 Latin1 编码转换后的 QString:" << textLatin1;

    QString fileName = QFileInfo(filePath).fileName(); // 文件名称
//    qDebug() << "fileName:" << fileName;

//    pwdFilePath = QFileInfo(filePath).absolutePath();// 文件所属绝对路径目录
//    qDebug() << "absolutePath:" << pwdFilePath;

//    pwdFilePath = QFileInfo(filePath).absoluteFilePath();// 文件绝对路径
//    qDebug() << "absoluteFilePath:" << pwdFilePath;


//    obj.insert("processTitle", "test"); // 申请标题
//    obj.insert("fileApplicant", "Wangyu");// 发起人
//    obj.insert("fileApprover", "wangyu");// 审批人
//    obj.insert("fileCategory", 1);// 文件类型（1-工控业务控制文件 2-工控业务反馈文件）

////    obj.insert("fileCheckvalue", "ceqewrqe21423"); // 文件 MD5
//    obj.insert("fileCheckvalue", fileMD5); // 文件 MD5
//    obj.insert("fileDept", "研发部门"); // 审批部门
//    obj.insert("fileInitdept", "研发部门");// 发起部门
//    obj.insert("fileName", fileName); // 文件名称
//    obj.insert("fileOrigin", "DNC");// 发送方系统
//    obj.insert("fileReceiver", "DMT");// 接收方系统
//    obj.insert("fileSecret", 2);// 文件密级（1-公开 2-内 部）
//    obj.insert("fileId", 1);// 文件 ID
//    obj.insert("filePath", filePath);// 文件相对路径
//    obj.insert("chunkSize", 104857600);// 分片大小，单位：字节
//    obj.insert("chunkIndex", 0); // 分片索引，从 0 开始
//    obj.insert("chunkCount", 1); // 分片数量
//    QString::fromUtf8(fileContent)
     obj.insert("file", base64Content);/*** 文件数据包   "z+C7+rHgusUssvrGt8LrLM/gu/rXtMysLLWxx7C14867xcTV1cr9DQoxLDEyMzIsMCw0DQo="   ***/
//    obj.insert("taskId", 1); // 任务 ID，同一批次任务 ID保持一致，如传输单个文 件，该字段不要传，不是置 空，不同批次任务 ID不同
//    obj.insert("taskCount", 1); // 任务文件数量，同一批次传 输文件数量，如传输单个文 件，该字段不要传，不是置 空
//    obj.insert("taskName", "taskTest"); //任务名称，如传输单个文 件，该字段不要传，不是置 空
    return obj;
}

bool readCsvJson(const QJsonDocument &doc)
{
    if(doc.isObject())
    {
        QJsonObject obj = doc.object();
        QStringList keys = obj.keys();

        for(const QString &key : obj.keys())
        {
            QJsonValue value = obj.value(key);
            if(value.isBool())
            {
                qDebug() << key << ":" << value.toBool();
            }
            if(value.isString())
            {
                qDebug() << key << ":" << value.toString();
            }
            if(value.isDouble())
            {
                qDebug() << key << ":" << value.toInt();
            }
            if(value.isObject())
            {
                QJsonObject subObj = value.toObject();
                qDebug()<< key << ":" << subObj;

                QByteArray base64Data = QByteArray::fromBase64(subObj.value("file").toString().toUtf8());

//                qDebug() << "base64Data_QString"  << subObj.value("file").toString();

//                QByteArray base64Data = subObj.value("file").toVariant().toByteArray();

//                QString CsvTextData = QString::fromUtf8(base64Data);

//                qDebug() << "CsvTextData:" << CsvTextData;


                // 将内容转换为 GB2312 编码
                QTextCodec *codec = QTextCodec::codecForName("GB2312");
                if (codec) {
                    QByteArray gb2312Bytes = codec->fromUnicode(subObj.value("file").toString()); // 转换为 GB2312 编码的 QByteArray
                    // 如果你需要将结果保存为字符串（例如，为了显示或进一步处理），可以这样做：
//                    qDebug() << "gb2312Bytes:" << gb2312Bytes;
                    QString gb2312String = codec->toUnicode(gb2312Bytes); // 通常这不是必要的，除非你需要在 QString 中以 GB2312 编码处理数据
//                    qDebug() << "GB2312:" << gb2312String; // 但通常你只需要 QByteArray 就可以写入文件或通过网络发送

                    // Base64解码
                    QByteArray base64Data = QByteArray::fromBase64(gb2312Bytes);

                    // 进行UTF-8转码
                    QString CsvTextData = QString::fromUtf8(base64Data);
//                    qDebug() << "CsvTextData:" << CsvTextData;
                    HttpRequest::m_map_post.insert("file_UTF8", CsvTextData);

                    // 进行GB2312转码
                    QTextCodec *codec = QTextCodec::codecForName("GBK");
                    if (codec) {
                        CsvTextData = codec->toUnicode(base64Data);
//                        qDebug() << "Decoded String with GBK:" << CsvTextData;
                        HttpRequest::m_map_post.insert("file_GBK", CsvTextData);
                    }

        //            QString text = QString::fromUtf8(content.toUtf8());
        //            qDebug() << "text:" << text;

        //            // 使用本地编码进行转换
        //            QString textLocal = QString::fromLocal8Bit(content.toUtf8());
        //            qDebug() << "使用本地编码转换后的 QString:" << textLocal;

        //            // 使用 Latin1 编码进行转换
        //            QString textLatin1 = QString::fromLatin1(content.toUtf8());
        //            qDebug() << "使用 Latin1 编码转换后的 QString:" << textLatin1;

                } else {
                    // 处理找不到 GB2312 编码的情况
                    qDebug() << "QString:" <<  QString();
                }




            }
        }
        return true;
    }
    return false;
}

#endif // MYJSON_H
